package cap4;

class MatrizRacional {
private Racional[][] mr;
// Constructor
public MatrizRacional(int nfil,int ncol){
  mr=new Racional[nfil][ncol];}
//Consultas
public int obtenerNfil ()    {
  return mr.length; }
public int obtenerNcol ()    {
  return mr[0].length; }
public boolean existePos(int f, int c) { 
  return (f>=0 && f < obtenerNfil()) &&
          (c>=0 && c < obtenerNcol());}
public Racional obtenerElem(int f,int c){
//Requiere f y c consistentes
  return mr[f][c];}
//Comandos
public void establecerElemento (int f,int c, 						       Racional x) {
//Requiere f y c consistentes
	mr[f][c]= x;} 
public void establecerIdentidad () {
//Requiere que el número de filas sea igual al de columnas
    iniMatrizRacional();
    for (int j=0;j<obtenerNcol();j++)
      mr[j][j] = new Racional(1,1);    }
public void iniMatrizRacional () {
  for (int i=0;i<obtenerNfil();i++)    
    for (int j=0;j<obtenerNcol();j++)
       mr[i][j] = new Racional(0,0);    }
public void xEscalar (Racional r) {
//Multiplica cada elemento por r
 for (int i=0;i<obtenerNfil();i++) 
   for (int j=0;j<obtenerNcol();j++)
      mr[i][j] = mr[i][j].producto(r);}
public void copy (MatrizRacional m) {
/*Crea un nuevo objeto con el nro de filas y columnas de m y referencias a los mismos elementos */
 mr = new Racional[m.obtenerNfil()][m.obtenerNcol()];
 for (int i=0;i<obtenerNfil();i++)  {
   for (int j=0;j<obtenerNcol();j++)
         mr[i][j] = m.obtenerElem(i,j); }}
public int cantElem (Racional ele)	{
/*Cuenta la cantidad de elementos equivalentes a ele que mantiene la matriz */
    int cant = 0;
     for (int i=0;i< obtenerNfil();i++)
       for (int j=0;j< obtenerNcol();j++)
         if (mr[i][j].equals(ele)) cant++ ;
    return cant;}	
public boolean esCuadrada () {
   return (obtenerNfil() == obtenerNcol()) ; }
public boolean esIdent () {
  if (!esCuadrada())
    return false;
  else return esIdentidad(obtenerNfil());}
private boolean esIdentidad (int n) {
 if (n == 1)
   return (mr[0][0].equals(new Racional(1,1)));
 else 
   return (mr[n-1][n-1].equals(new Racional(1,1)) &&
  		esCeroFila(n-1) && 
           esCeroColumna(n-1)&&
		esIdentidad(n-1));}
private boolean esCeroColumna(int i) {
	// TODO Auto-generated method stub
	return false;
}
private boolean esCeroFila(int i) {
	// TODO Auto-generated method stub
	return false;
}
}